/*
 * PagEventosTipoAtividade.java
 * 
 * Projeto: Kruskal - SRAC
 * LEDS - Laboratório de Engenharia e Desenvolvimento de Software
 * IFES - Instituto Federal do Espírito Santo - Campus Serra.
 */
package srac.controleatividades.cih;

import java.util.List;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.*;
import srac.controleatividades.cci.CtrlInterno;
import srac.controleatividades.cdp.TipoAtividade;

public class PagEventosTipoAtividade extends GenericForwardComposer {

    private CtrlInterno ctrl = CtrlInterno.getInstance();
    private Window winEventosTipoAtividade;
    private Listbox listTipoAtividades;
    private Div boxInformacao;
    private Label msg;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        ctrl.setPagEventosTipoAtividade(this);
        while (listTipoAtividades.getItemCount() > 0) {
            listTipoAtividades.removeItemAt(0);
        }

        List<TipoAtividade> atividades = ctrl.obterTipoAtividades(); //Obtem todas os tipo de atividades cadastrados
        if (atividades != null) {

            for (int i = 0; i < atividades.size(); i++) {
                TipoAtividade t = atividades.get(i);
                Listitem linha = new Listitem(atividades.get(i).toString(), t);

                linha.appendChild(new Listcell(atividades.get(i).getUnidadeTempo()));
                linha.appendChild(new Listcell(atividades.get(i).getCreditos().toString()));

                linha.setParent(listTipoAtividades);
            }
        }
    }
    
    public void onCreate$winEventosTipoAtividade(Event event) {
        //if feito para verificar se existe algum usuario logado, se nao existir eh redirecionado para o login
        if (Executions.getCurrent().getSession().getAttribute("usuario") == null) {
            Executions.sendRedirect("/");
            winEventosTipoAtividade.detach();
        }
    }

    public void addTipoAtividade(TipoAtividade t) {
        Listitem linha = new Listitem(t.toString(), t);

        linha.appendChild(new Listcell(t.getUnidadeTempo()));
        linha.appendChild(new Listcell(t.getCreditos().toString()));

        linha.setParent(listTipoAtividades);
    }

    public void refreshTipoAtividade(TipoAtividade t) {
        for (int i = 0; i < listTipoAtividades.getItemCount(); i++) {
            if (listTipoAtividades.getItemAtIndex(i).getValue() == t) {
                listTipoAtividades.getItemAtIndex(i).getChildren().clear();
                listTipoAtividades.getItemAtIndex(i).appendChild(new Listcell(t.toString()));
                listTipoAtividades.getItemAtIndex(i).appendChild(new Listcell(t.getUnidadeTempo()));
                listTipoAtividades.getItemAtIndex(i).appendChild(new Listcell(t.getCreditos().toString()));
                break;
            }
        }
    }

    public void onClick$excluirTipoAtividade(Event event) { //Exclui uma atividade
        Listitem listitem = listTipoAtividades.getSelectedItem(); //Pega o tipo de atividade selecionado
        if (listitem != null) {  
            eventoExcluir();   
        } 
        else {
            setMensagemAviso("info", "Selecione um Tipo de Atividade!");
        }
    }

    public void onClick$incluirTipoAtividade(Event event) { //Inclui um novo tipo de atividade 
        ctrl.abrirIncluirTipoAtividade();
    }

    public void onClick$alterarTipoAtividade(Event event) { //Altera um tipo de atividade
        Listitem listitem = listTipoAtividades.getSelectedItem(); //Pega o tipo de atividade selecionado
        if (listitem != null) {
            TipoAtividade t = listitem.getValue();
            ctrl.abrirEditarTipoAtividade(t);
        }
        else {
            setMensagemAviso("info", "Selecione um tipo de atividade!");
        }
    }

    public void onClick$consultarTipoAtividade(Event event) { //Consulta um tipo de atividade
        Listitem listitem = listTipoAtividades.getSelectedItem();
        if (listitem != null) {
            TipoAtividade t = listitem.getValue();
            ctrl.abrirConsultarTipoAtividade(t);
        }
        else {
            setMensagemAviso("info", "Selecione um tipo de atividade!");
        }
    }

    public void setMensagemAviso(String tipo, String mensagem) {
        boxInformacao.setClass(tipo);
        boxInformacao.setVisible(true);
        msg.setValue(mensagem);
    }

    public void onClick$boxInformacao(Event event) {
        boxInformacao.setVisible(false);
    }
    
    public void eventoExcluir() //Método para mostrar uma mensagem de confirmação de exclusão
    {
        Messagebox.Button b1 = Messagebox.Button.YES;       
        Messagebox.Button b2 = Messagebox.Button.NO;
        Messagebox.Button [] b = new Messagebox.Button[2];
        b[0] = b1;
        b[1] = b2;

        EventListener <Messagebox.ClickEvent> e = new EventListener() { //Pega o evento de click do mouse
            public void onEvent(Event evt) throws InterruptedException {
                if (evt.getName().equals("onYes")) { //Verifica se o botão apertado é o de sim
                    Listitem listitem = listTipoAtividades.getSelectedItem();
                    TipoAtividade ta = listitem.getValue();
                   
                    if (ctrl.apagarTipoAtividade(ta)) { //Verifica se é possível apagar o tipo de atividade, se for possível ele é excluído 
                        listTipoAtividades.removeItemAt(listTipoAtividades.getSelectedIndex());
                        setMensagemAviso("success", "Tipo de Atividade excluído com sucesso!");
                    } else {
                        setMensagemAviso("error", "Não foi possível excluir o Tipo de Atividade, já possui vinculos!"); 
                    }
                }
            }
        };
        Messagebox.show("Deseja excluir o Tipo de Atividade?","Confirmação",b,Messagebox.QUESTION , e); 
    }
}
